priv->maybe_reordered = FALSE;
priv->fixed_width = -1;
priv->title = g_strdup ("");
+
+ gtk_tree_view_column_create_button (tree_column);
}
static void
priv->child = NULL;
}
+ g_clear_object (&priv->button);
+
G_OBJECT_CLASS (gtk_tree_view_column_parent_class)->dispose (object);
}
gtk_tree_view_column_create_button (GtkTreeViewColumn *tree_column)
{
GtkTreeViewColumnPrivate *priv = tree_column->priv;
- GtkTreeView *tree_view;
GtkWidget *child;
GtkWidget *hbox;
- tree_view = (GtkTreeView *) priv->tree_view;
-
- g_return_if_fail (GTK_IS_TREE_VIEW (tree_view));
g_return_if_fail (priv->button == NULL);
priv->button = gtk_button_new ();
- if (priv->visible)
- gtk_widget_show (priv->button);
- gtk_widget_add_events (priv->button, GDK_POINTER_MOTION_MASK);
-
- /* make sure we own a reference to it as well. */
- if (_gtk_tree_view_get_header_window (tree_view))
- gtk_widget_set_parent_window (priv->button, _gtk_tree_view_get_header_window (tree_view));
+ g_object_ref_sink (priv->button);
- gtk_widget_set_parent (priv->button, GTK_WIDGET (tree_view));
+ gtk_widget_show (priv->button);
+ gtk_widget_add_events (priv->button, GDK_POINTER_MOTION_MASK);
g_signal_connect (priv->button, "event",
G_CALLBACK (gtk_tree_view_column_button_event),
gtk_widget_show (hbox);
gtk_widget_show (priv->alignment);
- gtk_tree_view_column_update_button (tree_column);
}
static void
else
model = NULL;
- /* Create a button if necessary */
- if (priv->visible &&
- priv->button == NULL &&
- priv->tree_view &&
- gtk_widget_get_realized (priv->tree_view))
- gtk_tree_view_column_create_button (tree_column);
-
- if (! priv->button)
- return;
-
hbox = gtk_bin_get_child (GTK_BIN (priv->button));
alignment = priv->alignment;
arrow = priv->arrow;
{
gboolean alternative;
- g_object_get (gtk_widget_get_settings (priv->tree_view),
- "gtk-alternative-sort-arrows", &alternative,
- NULL);
+ if (priv->tree_view)
+ g_object_get (gtk_widget_get_settings (priv->tree_view),
+ "gtk-alternative-sort-arrows", &alternative,
+ NULL);
+ else
+ alternative = FALSE;
switch (priv->sort_order)
{
/* It's always safe to hide the button. It isn't always safe to show it, as
* if you show it before it's realized, it'll get the wrong window. */
- if (priv->button &&
- priv->tree_view != NULL &&
+ if (priv->tree_view != NULL &&
gtk_widget_get_realized (priv->tree_view))
{
if (priv->visible &&
/* Queue a resize on the assumption that we always want to catch all changes
* and columns don't change all that often.
*/
- if (gtk_widget_get_realized (priv->tree_view))
+ if (priv->tree_view && gtk_widget_get_realized (priv->tree_view))
gtk_widget_queue_resize (priv->tree_view);
-
}
/* Button signal handlers
g_assert (priv->tree_view == NULL);
priv->tree_view = GTK_WIDGET (tree_view);
- gtk_tree_view_column_create_button (column);
+
+ /* make sure we own a reference to it as well. */
+ if (_gtk_tree_view_get_header_window (tree_view))
+ gtk_widget_set_parent_window (priv->button, _gtk_tree_view_get_header_window (tree_view));
+
+ gtk_widget_set_parent (priv->button, GTK_WIDGET (tree_view));
priv->property_changed_signal =
g_signal_connect_swapped (tree_view,
{
GtkTreeViewColumnPrivate *priv = column->priv;
- if (priv->tree_view && priv->button)
+ if (priv->tree_view)
{
gtk_container_remove (GTK_CONTAINER (priv->tree_view), priv->button);
}
priv->visible = visible;
+ gtk_widget_set_visible (priv->button, visible);
+
if (priv->visible)
_gtk_tree_view_column_cell_set_dirty (tree_column, TRUE);
priv = tree_column->priv;
if (priv->visible &&
- priv->button &&
priv->clickable)
gtk_button_clicked (GTK_BUTTON (priv->button));
}